# 说明 @Author zjy 
# 1.本脚本需要在root用户下运行,注意是root,不是一般用户也不是su
# 2.运行脚本请保证安装了oracle-jdk-8，并配置了java环境变量（在所有用户下都能生效）,不管是oraclejdk好还是openjdk，9,10,11版本统统不行，我已经帮你们踩过坑了，hadoop官方的说明是尽量在2020年不知道几月完成hadoop3.x对jdk11的支持，现在还在修复bug中
# 3.运行该脚本请保证root用户～目录下的.ssh文件夹里面是空的
# 4.本脚本已在deepin，ubuntu下测试过，均在30秒以内自动完成了配置，如果你实在想尝试下centos或fedora，可以把安装ssh服务那改一下（对应33和35行），比如apt-get install改成yum install，开启改成service sshd start，网上一搜一堆
# 5.本脚本只适用于hadoop3.x
# 6.请保证各自linux版本不要过老
# 7.保证你原先的Hadoop卸干净了（包括hadoop的配置，看看自己原先改过哪些系统文件）
# 8.执行脚本前请确定hadoop的tmp文件夹是空的
# 9.如果tmp文件删掉后又自动生成了Hadoop的相关文件夹，说明进程残留，重启是个好办法
# 10.总之就是电脑越干净效果越好

# 使用
# 把该脚本与hadoop的tar.gz压缩包放在一个目录下运行，随便哪个目录运行都可以，一般下载到download下的，你就把脚本拷到download目录下运行就是了
# 输入./hadoop-install.sh运行（这个就不需要多讲吧，运行前记得chmod改下权限，比如chmod 777 *）
# 等待
# 完成

# 额外
# 由于该配置的tmp目录采用的是默认设置，所以在每次开机的时候会自动清理掉tmp目录
# 故得注意以下两点：
# 1.每次开机都得格式化启动 namenode -format
# 2.格式化一次后就不能再次格式化启动了，因为会导致tmp目录下的文件版本不同而致hadoop启动失败


#hadoop版本请自行修改
export HADOOP_VERSION=hadoop-3.2.0


#安装目录也可以自行修改，ctrl+f替换下，这里默认是/usr/local/hadoop/$HADOOP_VERSION
mkdir -p /usr/local/hadoop
#解压当前目录下的hadoop*.tar.gz
tar -zxvf ${HADOOP_VERSION}.tar.gz -C /usr/local/hadoop
#在hadoop运行环境导入java_home
sed -i '55iexport JAVA_HOME='$JAVA_HOME /usr/local/hadoop/${HADOOP_VERSION}/etc/hadoop/hadoop-env.sh
#安装openssh服务
apt-get install openssh-server
#开启ssh
/etc/init.d/ssh start
#配置core-site.xml
echo '<?xml version="1.0" encoding="UTF-8"?>' > /usr/local/hadoop/${HADOOP_VERSION}/etc/hadoop/core-site.xml
echo '<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>' >> /usr/local/hadoop/${HADOOP_VERSION}/etc/hadoop/core-site.xml
echo '<configuration>' >> /usr/local/hadoop/${HADOOP_VERSION}/etc/hadoop/core-site.xml
echo '  <property>' >> /usr/local/hadoop/${HADOOP_VERSION}/etc/hadoop/core-site.xml
echo '      <name>fs.defaultFS</name>' >> /usr/local/hadoop/${HADOOP_VERSION}/etc/hadoop/core-site.xml
echo '      <value>hdfs://localhost:9000</value>' >> /usr/local/hadoop/${HADOOP_VERSION}/etc/hadoop/core-site.xml
echo '  </property>' >> /usr/local/hadoop/${HADOOP_VERSION}/etc/hadoop/core-site.xml
echo '</configuration>' >> /usr/local/hadoop/${HADOOP_VERSION}/etc/hadoop/core-site.xml
#配置hdfs-site.xml
echo '<?xml version="1.0" encoding="UTF-8"?>' > /usr/local/hadoop/${HADOOP_VERSION}/etc/hadoop/hdfs-site.xml
echo '<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>' >> /usr/local/hadoop/${HADOOP_VERSION}/etc/hadoop/hdfs-site.xml
echo '<configuration>' >> /usr/local/hadoop/${HADOOP_VERSION}/etc/hadoop/hdfs-site.xml
echo '  <property>' >> /usr/local/hadoop/${HADOOP_VERSION}/etc/hadoop/hdfs-site.xml
echo '      <name>dfs.replication</name>' >> /usr/local/hadoop/${HADOOP_VERSION}/etc/hadoop/hdfs-site.xml
echo '      <value>1</value>' >> /usr/local/hadoop/${HADOOP_VERSION}/etc/hadoop/hdfs-site.xml
echo '  </property>' >> /usr/local/hadoop/${HADOOP_VERSION}/etc/hadoop/hdfs-site.xml
echo '</configuration>' >> /usr/local/hadoop/${HADOOP_VERSION}/etc/hadoop/hdfs-site.xml
#生成ssh秘钥并记录,为了实现免密登录，而ras这种加密方式比较好
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 0600 ~/.ssh/authorized_keys
#开始格式化hadoop-> namenode  （这种配置下是没有制定tmp目录的，每次开机都会自动清理掉tmp目录，所以每次开机得重新格式化一下，同样也不能多次格式化以导致版本不同，因为会让一些进程启动不了。你可以自己配置tmp目录避免这种情况）
/usr/local/hadoop/${HADOOP_VERSION}/bin/hdfs namenode -format
#定义用户
sed -i '59iexport HDFS_NAMENODE_USER=root' /usr/local/hadoop/${HADOOP_VERSION}/etc/hadoop/hadoop-env.sh
sed -i '60iexport HDFS_DATANODE_USER=root' /usr/local/hadoop/${HADOOP_VERSION}/etc/hadoop/hadoop-env.sh
sed -i '61iexport HDFS_SECONDARYNAMENODE_USER=root' /usr/local/hadoop/${HADOOP_VERSION}/etc/hadoop/hadoop-env.sh
#配置yarn,防止一些process报错,比如stop-all.sh
sed -i '2iYARN_RESOURCEMANAGER_USER=root' /usr/local/hadoop/${HADOOP_VERSION}/sbin/start-yarn.sh
sed -i '3iHADOOP_SECURE_DN_USER=yarn' /usr/local/hadoop/${HADOOP_VERSION}/sbin/start-yarn.sh
sed -i '4iYARN_NODEMANAGER_USER=root' /usr/local/hadoop/${HADOOP_VERSION}/sbin/start-yarn.sh
#同上
sed -i '2iYARN_RESOURCEMANAGER_USER=root' /usr/local/hadoop/${HADOOP_VERSION}/sbin/stop-yarn.sh
sed -i '3iHADOOP_SECURE_DN_USER=yarn' /usr/local/hadoop/${HADOOP_VERSION}/sbin/stop-yarn.sh
sed -i '4iYARN_NODEMANAGER_USER=root' /usr/local/hadoop/${HADOOP_VERSION}/sbin/stop-yarn.sh

#启动
/usr/local/hadoop/${HADOOP_VERSION}/sbin/start-all.sh

#查看是否启动成功，若有6个进程，则启动成功，浏览器输入localhost:9870,localhost:8088等查看效果
jps
